home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / hirndsel / src.lzh / FILCHK.C next >
Text File  |  1992-12-16  |  4KB  |  118 lines

  1. /************************************************************/
  2. /*  Main=HIRNDSEL.C                                         */
  3. /*  外部定義ファイル有無チェック&条件チェックルーチン[FILCHK.C]             */
  4. /************************************************************/
  5. /* rtn = filchk(my_name, tiff_name ) ;                      */
  6. /************************************************************/
  7. /* IN :                                                     */
  8. /*    char *my_name ;        : プログラム名(argv[0])           */
  9. /* OUT:                                                     */
  10. /*    char *tiff_name ;      : 条件一致時の指定ファイル名       */
  11. /* RETURN :                                                 */
  12. /*    int  rtn ;             : チェック結果                     */
  13. /*                             = MATCH     : 一致条件有り   */
  14. /*                             = NO_MATCH  : 一致条件無し   */
  15. /*                             = NOTHING   : 外部ファイル無し   */
  16. /************************************************************/
  17. #include <stdio.h>
  18. #include <memory.h>
  19. #include <string.h>
  20. #include <time.h>
  21. #include <stdlib.h>
  22.  
  23. #include "hirndsel.h"
  24.  
  25. int
  26. filchk( char *my_name, char *tiff_name )
  27. {
  28.     struct tm *ltime ;                   /* システム日付等格納領域 */
  29.     clock_t t_time ;                     /* time格納領域       */
  30.  
  31.     char cmpdate[SET_DATE_LENG] ;        /* 比較日付格納領域 */
  32.     size_t leng ;                        /* 比較日付長 */
  33.     char rbuf[DEF_1MAX] ;                /* 外部ファイル読み込み領域(一行分) */
  34.     char chk_fname[PATH_LENG] ;          /* DEFファイル名格納領域 */
  35.     int rtn ;                            /* 各関数復帰値 */
  36.     int i ;                              /* ループカウンタ */
  37.     int def_leng ;                       /* 拡張子DEF長 */
  38.     FILE *ifp ;                          /* 入力ファイルポインタ */
  39.  
  40.     /**************/
  41.     /* 変数初期化 */
  42.     /**************/
  43.  
  44.     t_time = clock() ;
  45.     ltime = localtime( &t_time ) ;
  46.     memset( cmpdate, NULL, sizeof( cmpdate ) ) ;
  47.     memset( chk_fname, NULL, sizeof( chk_fname ) ) ;
  48.     memset( tiff_name, NULL, sizeof( tiff_name ) ) ;
  49.     def_leng = strlen( DEF ) ;
  50.     rtn =strlen(my_name);
  51.     strcpy(&chk_fname[0],my_name);
  52.  
  53.     /* 外部ファイル名セット */
  54.     for( i=1 ; i < def_leng + 1 ; i++ )
  55.     {
  56.         if( my_name[rtn - i] == '.' )
  57.             break;
  58.     }
  59.     memcpy( &chk_fname[rtn - i], DEF, def_leng ) ;
  60.  
  61.     /* 現在日時獲得(文字列) */
  62.     leng = strftime( cmpdate, sizeof(cmpdate), "%Y/%m/%d %H:%M %a", ltime ) ;
  63.  
  64.     if(( ifp=fopen( chk_fname, "rb" ) ) == NULL )
  65.        return( NOTHING ) ;                       /* DEFファイル無し */
  66.  
  67.     for( ; ; )
  68.     {
  69.         /* DEFファイル一行読み込み */
  70.         memset( rbuf, NULL, sizeof( rbuf ) ) ;
  71.         for( i = 0 ; i < DEF_1MAX ; i++ )
  72.         {
  73.             if( ( rtn = fread( &rbuf[i], 1, 1, ifp ) ) == NG )
  74.             {
  75.                 fclose( ifp ) ;
  76.                 return( NG ) ;
  77.             }
  78.             if( rtn == NULL )
  79.             {
  80.                 fclose( ifp ) ;
  81.                 return( NO_MATCH ) ;      /* 最後まで読んだけど条件一致せず */
  82.             }
  83.             if( rbuf[i] == LF )
  84.                 break ;                   /* 一行読み込み終わり */
  85.         }
  86.         if( rbuf[0] == '#' )
  87.             continue ;                    /* この行、コメント行 */
  88.  
  89.         for(i = 0 ; i < leng ; i++ )
  90.         {
  91.             if( rbuf[i] == '?' )
  92.                 rbuf[i] = cmpdate[i] ;    /* 省略値の復元 */
  93.         }
  94.  
  95.         /* 条件比較 */
  96.         if( memicmp( &cmpdate[0], &rbuf[0], leng ) == 0 )
  97.         {
  98.             /* TIFFファイル名獲得 */
  99.             for( i = TIFF_START ; i < TIFF_END ; i++ )
  100.             {
  101.                 if( rbuf[i] == CR )
  102.                 {
  103.                     memcpy( &tiff_name[0], &rbuf[TIFF_START], i-21 ) ;
  104.                     strcat( tiff_name, TIF ) ;
  105.                     break ;
  106.                 }
  107.                 if( rbuf[i] == '.' )
  108.                 {
  109.                     memcpy( &tiff_name[0], &rbuf[TIFF_START], i-17 ) ;
  110.                     break ;
  111.                 }
  112.             }
  113.             fclose( ifp ) ;
  114.             return( MATCH ) ;
  115.         }
  116.     }
  117. }
  118.